11.4.1. Çırpı Fonksiyonu Örneği

Örnek: Komut Çözümleme
Bir robot dilinin içerisinde herbiri 1 harften oluşan 26 komut vardır. Komutların herbiri için birer C fonksiyonu yazılmış olup bir yorumlayıcı yazılması istenmektedir. Böylece komut kodu çözülecek ve ilgili komuta ait kodun bulunduğu yere dallanılarak komutların yürütülmesi sağlanacaktır. İlgili yorumlayıcıyı çırpı algoritması uyarınca tasarlayınız. Başka hangi yöntemle tasarlanabileceğini tartışınız.

Çözüm: Bu tasarım süreci üç adımda yapılır:
Herşeyden önce komut adları ve onlara ait C kodunun bellek adreslerini içeren bir tablo oluşturulmalıdır.
Daha sonra bir çırpı fonksiyonu üretilerek gelen komut koduna ait indis bilgisi elde edilmelidir.
Bu indis değeri aracılığıyla ilgili komut adresi bir işaretçi değişkene atanır ve doğrudan o komuta ait fonksiyon çağrılır.
Komut adları tek harften oluşuyordu; aşağıda görüldüğü gibi alfabetik olarak sıralanıp her satırın yan gözüne de komut adresleri yazılırsa Çırpı Tablosu elde edilmiş olunur.

Çırpı fonksiyonu bulma, üretme veya belirleme biraz da tasarımcının öngörüsüne bağlıdır; bu örnek için oldukça yalın bir çırpı fonksiyonu bulunabilir. Çünkü işleme sokulacak parametre bir karakterden oluşmaktadır. Karakter sayısı arttıkça ideal bir çırpı fonksiyonu bulmak güçleşir. Eğe komutlar yukarıdaki tabloda olduğu gibi A'dan başlanıp Z'ye kadar alfabetik olarak sıralanırsa, çırpı fonksiyonu A için 0 ve sırasıyla B, C... Y, Z için 1, 2, ... 25, 26 tamsayılarını üretmelidir. Bu da ASCII tabloya göre, büyük harfler için, karakterden 65 sayısı çıkarılarak elde edilir. ASCII tabloya göre A harfi 65, B harfi 66 koduna sahiptir ve diğerleri de 67, 68 olarak gider. Dolayısıyla çırpı fonksiyonu H=kr-65 olarak bulunur. Bu fonksiyon her komut için ayrı bir tamsayı üreteceği için idealdir.